perm filename PURGE.SAI[SYS,HE]23 blob sn#128402 filedate 1974-10-28 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00010 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "PURGE"
C00005 00003	⊃	This is the magic macro which defines good files
C00008 00004			⊃ CAMERA CALIBRATION
C00011 00005		ZZ(TOWER,NUL),		⊃	TOWER OF HANOI PROGRAMS
C00015 00006		⊃	AJT FILES
C00018 00007	⊃	Now we use the magic macro to generate our tables
C00020 00008	⊃	This routine types the commands
C00022 00009	⊃	This routine outputs the illegal file names.
C00025 00010	⊃	Now we get down to business
C00027 ENDMK
C⊗;
BEGIN "PURGE"
LET DEFINE=REDEFINE;
STRING ARRAY UFD_FILE, UFD_EXT[1:1000];
INTEGER UFDLENGTH;
DEFINE DSK="1", LPT="2", CRLF="('15&'12)", ⊃="COMMENT";

⊃	make CVXSTR honest;

SIMPLE STRING PROCEDURE CVXX(INTEGER VAL);
	BEGIN STRING FOO;
	INTEGER I;
	FOO ← CVXSTR(VAL);
	FOR I ← LENGTH(FOO) STEP -1 UNTIL 1 DO IF FOO[I FOR 1]≠" " THEN DONE;
	RETURN(IF I THEN FOO[1 FOR I] ELSE "");
	END;

⊃	read ufd file;

SIMPLE PROCEDURE UFDREAD;
	BEGIN INTEGER EOF, SIXBIT, FLAG;
	OPEN(DSK,"DSK",8,2,0,128,EOF,EOF);
	LOOKUP(DSK,"SYS HE.UFD[1,1]",FLAG);
	IF FLAG THEN USERERR(0,0,"UFD LOOKUP ERROR");
	UFDLENGTH ← 0;
	WHILE TRUE DO
		BEGIN
		SIXBIT ← WORDIN(DSK);
		IF EOF THEN DONE;
		IF SIXBIT THEN
			BEGIN
			UFD_FILE[UFDLENGTH←UFDLENGTH+1] ← CVXX(SIXBIT);
			UFD_EXT[UFDLENGTH] ← CVXX(WORDIN(DSK) LAND
				'777777000000);
			END ELSE WORDIN(DSK);
		WORDIN(DSK);
		WORDIN(DSK);
		END;
	CLOSE(DSK);
	END;

DEFINE EXT_LENGTH="25";
PRELOAD_WITH "SAI","FAI","MAC","F4","REL","DMP","","LST","WRU",
	"PUB","FND","TRP","DAT","???","TXT","HDR","SEG","LNK","RUN","AUX",
	"DOC","CMD","GUN","HAL","TRJ","YEL";
SAFE STRING ARRAY COMMON_EXT[0:EXT_LENGTH];
DEFINE SAI="1", FAI="2", MAC="4", F4="'10", REL="'20", DMP="'40", NUL="'100",
	LST="'200",WRU="'400",PUB="'1000",FND="'2000",TRP="'4000",
	DAT="'10000",CAL="'20000",TXT="'40000",HDR="'100000",SEG="'200000",
	LNK="'400000",RUN="'1000000",AUX="'2000000",DOC="'4000000",
	CMD="'10000000",GUN="'20000000",HAL="'40000000",TRJ="'100000000",
	YEL= ↓⊂;⊃AAAβ↓AAA∩aα
&"B%2¬Ki
6>∀(b⊗b%Z&uαd
:⊃α
⊃l4*$*~&:*α:V2dJ:⊃u∪1	mλJ&:∩-Aα>→∧rV21∧*bQ9Xh(0D&&C'MβO→βS#*β7π∨N→β7π∨∪=β←FK∂!β&+≠';/→β∨?}!β≠'f+Ml4Ph*∩⊗4J:∃αEAuλ4PHD$&\ZAα~Lb⊗MlhP4($I	α⊗∩<)α~>db>↑⊗∪X4(4PJji"$!2~εJZJ⊗1J`$$DL"V66JαJε&"αR=α4zJ∞∃¬~f6
|bMl4PJji"Lr:⊗Ie~ε%.∀*1%0Iλ&⊗∩<)α~>db>↑⊗∩α&:NL"∃α⊗$:∃αN≤
::⊗∪X4(&UQ"⊗∩<)2NεJZJ⊗1\"6A%`HD&⊗$:∃α~|b2>↑-⊃α6εLqαBJ|:Jε5Xh(&jRB6&N,"≥2NI.J⊗bI0$DL*∩≡∃∧2>22⎇:⊗Iα-"&2&%IαJ>-"&:⊗≠X4(&UQ"∞>u"J12≤
%.J,a%0$λJ⊗∩≡*α~>2dz↑⊗I∧~>:R∀z1αB∀z≡JεkX4(&UQ"N∞r⊗I2≤
%.J,a%0$λJ⊗∩≡*α~>2dz↑⊗I∧
∞∞>lz∩εRLz9αJ⎇*R&:-→l4(hP$$E∧~VJZ*α~&R$*Il4Ph(&jRB∞VJ4)2NεJZJ⊗1\"6A%`HD&∞-∩Z∃α4JRR⊗∩α6ε&rαBJ>=∩ε5lhP&jiDj&N∞-⊃2NεJZJ⊗1J`$D&≥*JZ∃∧2&RR-⊃αVRLb&Re¬αJ>≡∀
6MlhP&jiD~VJ~I2~εJZJ⊗1J`$D&≥*JZ∃∧2&RR-⊃α~εLaαJ>-"&:⊗≠X4(4PH$EαD
:⊃>-J∃α6|r&R>∪X4(4PJji"D)2NεJI0$$λJ"ε:"z⊗f∃∧j>:&$zI↓"%*6Aα|qαmEc~u%lhP&jiDB⊗&:M!2~εJZJ⊗1J`$D&4
&1α≤z∩∃α4zIα"+X4(&UQ"∩>D)2:VbI0$$λJ∞>6∧J2⊗Mbα2>ε%→1αεt!αNε4*Mα"*α>9α≥JMl4Ph($$
α>
*,~QαN,:6⊗:$*I↓5∧∩eα≥rα≡Jε∧)l4(hP&jiEαJ>Rzb≡V9J`$$DMαJ>R⎇"fB∃∧2&2∃∧2>Iα=*:2=Xh(&jRB≡V:dy2NεJZJ⊗1\"6A%`HD&N,:6⊗:$*Il4PJji"≤
&∩&~bNε%]∩⊗1%`HD$&$JNB2
IαBε≤Zε≡∃Xh(&jRBNεZ∀*M2NI.J⊗bI0$DHJ~&2*α"ε:$b&:≥Xh(&jRBNε&≤*I2NI.J⊗bI0$DHJN⊗J4J∞∃lhP&jiD2>JN-⊃2NεJZJ⊗1J`$D$Lj>J∃¬~⊗JZL~∃l4PJji"=*:~εJb~ε%]∩⊗1%`HD$&4
&1α≤*JZ&≤)l4(MRi"N≤*:∃2≤
%.J,a%0$λH&∞J⎇~MαJ,2⊗J⊗t~∃l4PJji"dJ:∃2≤
%.J,a%0$λH&2&t)α~&%"&:≥Xh(&jRB2&:4*I2NI.J⊗bI0$DHJ2&:*α∩εR
αNRJ,~Q9lhP&jiEαJ>Qe~ε%.∀*1%0Iλ$&B∀zR>RMα∃αN%∩V∞QsX4(&UQ"6ε¬→E2NI.J⊗bI0$DHJBεJ≤J:≥lhP&jiDjεBM∩bNε%]∩⊗1%`HD$&l
BB&t9l4(MRi"N,∩JM2$z
%0HHD&N,∩J>V$J:∃αdJNR&t9αε:"αbJ⊗3X4(&UQ"NR∃*∞Q2$z
%0HHD&∩
"¬αN%∩V∞R-∩∃α∩|~V6⊗u"εR&|ql4(MRi"∞|jε:⊃d">
%`H$D&≤z66εt!α∩>≥*6⊗:$
R&>sX4(4PH$Eα-"&2&%IαBε≤Zε≡∃∧
:⊃α%∩&Z⊗∩↓5α>rαV∩AXh(4(λJji"LJ∩JYe~ε%.$jA.↑∃)%0$λJ:⊗]∧"J&Z-⊃α~>∩αVR&dJReα∧
∞.ε<)l4(λJji"D*VR&bbNε%]:JU%`HD&"r⊃>⊗L)αVRLb&Re¬∩>VRLr⊗MlhPD&jRBJV:LI2:VbI0$$λJ∩=α4J2∃α4zIαJ,r:&::α&&∩∃1l4(λJji"D*6ε∞∩b:V1J`$$DLjε∞J⎇→α~>∩αVR&dJReα∀zVR&t*Ml4P0$$
α∞ε6-∩¬α∞b&
J
"&>9Xh(4(MRi"∞j⊗J¬e~ε%.$jA.↑∃)%0$λJ∞ε6-∩¬α∞b&
J
"&>9¬αJ>≡∀
5l4PJji"≤z
6ε"bNε%]∩⊗1%`HD&∞j⊗J¬¬*R&2M"eαJ⎇*R&:-→l4(MRi"∩
"¬2:,a%0$Iλ&∞εdJ
Jε$J>9α$
R¬α4zIα∞j⊗J¬Xh(&jRB∩εR⊃2:VbI0$$λJ∞ε2L∩JεRLz9α∩
"¬α~⎇⊃α:⊗<~ε5lhP4($I	α⊗∩<)αZ⊗∀J~&⊗∪X4(4PJji"4*J&~JbNε%\"6A%`HD&2Lr∃αZ-∩&~&-⊃l4(hP$D&≤Beα~Lb⊗M↓Dz
M9∧z9αV%↓$4(hPD&jRB>AEdjε
.∀*1%0Iλ&N>∀*1α>∧*JεR⎇⊃l4(λJji"2⊃2NI.∩6αZ2:-]∩V9%aλ&∩JM2⊗Iα4zIα~|~VMα¬∩>≡Jil4(λJji"<J2~>~bNε%\"6A%`HD&~|~VMα¬∩>≡Jil4(λJji"<J2⊗f*bNε%\"6A%`HD&∞⎇∩:⊗I∧2&:∩-⊃αBJ|:Jε5Xh(D&UQ"RZ≤*I2NI%0$Iλ&~&d)α∞>lj>9α$yαε~"b≡&24z
2≡Lb⊗f∃Xh(D&UQ"NR\"JY2≤
%.∩m↓%0$λI⎇⎇⎇{yl4(λJji"≤
2∩J2bNε%\"6A%`HD%⎇{y⎇⎇lhPD&jRB"ε:%~∃2NI%0$Iλ&~&d)α∞>lj>9α$yαNR\"JYαr⊃α∞b∩JYXh(D&UQ"∞εbb2:-]∩V9%`HD&J,qα∞>u"J>1∧2&2⊗~α~>I∧~ε2∩∃1l4(λJji"≥"-22tY.JVrI0$DM∩V9α≤z:RJ|aα~&d*Mα~⎇⊃αNR\"JYlhPD&jRB:⊗↑≤
52NI.∩6αI0$DLr⊗]α≤
6⊗J
α∞ε2L∩JεRLz9αB∀z≡JεkX4(4PHD&R|⊃α~&d*MβK/β3π∂.!βe∧
*Q↓jα>9α,"Al4Ph(D&UQ"∞>dzI2NI.∩6αI0$DL~>2>∩αJ⊗∞|::&j-⊃l4(hP$D&dzUα~Lb⊗MlhP4(&UQ"6ε%∩&a24
%.J,a%0$λJ6εR∀Jaαε∀JR!9¬*R&2M"eαJ⎇*R&:-→l4(MRi"Z,~Q2~I.J⊗bI0$DM2⊗∞R⎇⊃αεJM"!9α-"&2&%IαJ>-"&:⊗≠X4(&UQ"NεLb&	2≤
%.J,a%0$λJεJ5¬*R&2M"eαJ⎇*R&:-→l4(MRi""r∩e2≤
%.∩m↓%0$λJεJ5∧~>:R∀z1αB∀z≡JεkX4(&UQ""εt"	2NI.∩6αI0$DL
J5α≤z:RJ|aαBJ|:Jε5Xh(&jRB&:R4

2~I.J⊗bI04(MRi"f,b2>]e~ε%.$
Q%0Iλ&εJjαR⊗N$J:≥α¬∩>≡Jil4(MRi"
e*∃2NI.∩ε"I0$DL
J5α$*NR&t9αBJ|:Jε5Xh(&jRB↑εZ*bNε%J`4(&UQ"6>4)2NεJZ∩6AJ`4(&UQ"6>$*12NI.∩6αI0$DLj>∩⊗bα
V&d"⊗IlhP&jiE2⊗∞R⎇⊃2NεJI0$$λJZ⊗∞$zIα∩,~2εJ
"&>:≠X4(&UQ""ε≤AAY24
%.J,a%04PJji",r∩⊗Id2ε%.∀*1%0Iλ&εJjαVR&dJReα∀zVR&t*Ml4PJji"%∩&Z∃d2ε%.∀*1%0Hh(&jRBf⊗2zb∩6AJ`4(&UQ"εJjb:V1J`4(&UQ"εJm~>12u*1%0hP&jiE"Jε)e~ε%%`h(&jRBR"J⎇92NεJI04(	ZZ(TOWER,NUL),		⊃	TOWER OF HANOI PROGRAMS;
	ZZ(NLF,SAI+DMP+YEL+TRJ),
	ZZ(HANOI,NUL+HAL+TRJ),

	⊃	RPO FILES - ON UDP (OBSOLETE);

⊃	ZZ(SIMPLE,SAI+DMP),	⊃	SIMPLE BODY RECOGNIZER;
⊃	ZZ(SIMAUX,SAI),		⊃	REST OF SIMPLE;
⊃	ZZ(DPDP,F4+REL),	⊃	SIMPLE UTILITY ROUTINES;
⊃	ZZ(MODELS,TRP),		⊃	SIMPLE'S PROTOTYPES;

⊃	ZZ(COMPLX,NUL),		⊃	COMPLEX FILES;
⊃	ZZ(CPXSYM,AUX),
⊃	ZZ(RECOG,SAI+AUX+DMP+CMD),	⊃	RECOGNIZER;
⊃	ZZ(RECOG0,SAI),
⊃	ZZ(RECOG1,SAI),
⊃	ZZ(RECOG2,SAI),
⊃	ZZ(RECOG3,SAI),
⊃	ZZ(RECDPY,SAI+HDR),
⊃	ZZ(RECCOM,AUX),
⊃	ZZ(SEGMEN,SAI+AUX+DMP+CMD),	⊃	SEGMENTER;
⊃	ZZ(SEG0,SAI),
⊃	ZZ(SEG1,SAI),
⊃	ZZ(SEG2,SAI),
⊃	ZZ(SEGDPY,SAI+HDR),
⊃	ZZ(SEGCOM,AUX),
⊃	ZZ(PREDIC,SAI+AUX+DMP+CMD),	⊃	PREDICTOR;
⊃	ZZ(PRED0,SAI+FAI+AUX),
⊃	ZZ(PRED1,FAI),
⊃	ZZ(PRED2,FAI),
⊃	ZZ(PRED3,FAI),
⊃	ZZ(PRED4,FAI),
⊃	ZZ(PRED5,FAI),
⊃	ZZ(PRECOM,AUX),

	⊃	WAP FILES;

⊃	ZZ(WALDSK,SAI+DMP),
⊃	ZZ(WALEYE,SAI+DMP),
⊃	ZZ(WALDRV,SAI+DMP),
⊃	ZZ(WAL,CMD),
⊃	ZZ(WEC,CMD),
⊃	ZZ(LINE,FND),
⊃	ZZ(IMAGE,SAI),
	⊃	AJT FILES;

	ZZ(COLOUR,SAI+DMP),	⊃	NEW COLOUR PROGRAM;
	ZZ(PROTO,SAI),		⊃	DISPLAYS GUNNAR PROTO FILES;
⊃	ZZ(BLK0,DAT),		⊃	PICTURE FILES FOR STEREO;
⊃	ZZ(BLK1,DAT),
⊃	ZZ(BLK2,DAT),
⊃	ZZ(BLK3,DAT),

	⊃	GENERAL FILES maintained by KKP;

	ZZ(WHLTST,SAI+DMP),	⊃	COLOR WHEEL TEST PROGRAM;
	ZZ(DACTST,SAI+DMP),	⊃	DAC TEST PROGRAM;
	ZZ(SERTST,SAI+DMP),	⊃	TSERVO TEST PROGRAM;
	ZZ(TBLTST,SAI+DMP),	⊃	TURNTABLE TEST PROGRAM;
	ZZ(POTCAL,SAI),		⊃	POT CALIBRATION ROUTINE;
	ZZ(APPLY,SAI+DOC+DMP+PUB), ⊃ 	OPERATOR TESTING PROGRAM;
	ZZ(FLIST,SAI+DOC+DMP),	⊃	FILE LISTER ;
	ZZ(PREAMB,SAI+TXT),	⊃	GLOBAL MODEL DEFINITIONS;
	ZZ(EDGCUR,PUB+DOC),	⊃	EDGE FOLLOWER DOCUMENTATION;
	ZZ(HAND,WRU),		⊃	HAND/EYE MONITOR DOCUMENTATION - I;
	ZZ(MESSAG,WRU),		⊃	 DITTO - PART II;
	ZZ(MONITR,WRU),		⊃	 DITTO - PART III;
	ZZ(MACROS,NUL),		⊃	LOAD MACROS FOR II SYSTEM;
	ZZ(PURGE,SAI+DMP),	⊃	THIS PROGRAM;
	ZZ(GLORPG,NUL),		⊃	COMPILE FILE FOR ALL HE PROGRAMS;
	ZZ(SAIRPG,NUL),		⊃	COMPILE FILE FOR OTHER SAIL PROGRAMS;
⊃	ZZ(GLBNEW,SEG),		⊃	SAVE SEGMENT FOR II (OBS. ON UDP);
	ZZ(EDGLIB,REL),		⊃	LIBRARY FOR EDGE AND CURVE;
	ZZ(PREMAK,SAI+DMP),	⊃	GENERATES COMMENTLESS PREAMBLE FILE;
⊃	ZZ(CALPLT,SAI+DMP),	⊃	PLOTTER DUMP ROUTINE FOR EDGE POINTS;
⊃	ZZ(PLOTS,FAI+REL),	⊃	SPECIAL SAILABLE CALCOMP ROUTINES (UDP);
	ZZ(CAMDRV,NUL+DMP),	⊃	NEW CAMERA MOVER;
	ZZ(DPYSUB,HDR),		⊃	DISPLAY HEADER FILE;
⊃	ZZ(SQRT,FAI+REL),	⊃	SQUARE ROOT ROUTINE;
	ZZ(SAITRG,NUL+FAI+REL),	⊃	SAIL TRIG FUNCTIONS - HEAD AND TEXT;
⊃	ZZ(HASH,FAI+REL),	⊃	HASH CODER FOR MAKING NEW SEGMENT;
	ZZ(PICTUR,SAI),		⊃	PICTURE INPUT PROGRAM;
	ZZ(SPICT,SAI+DMP),	⊃	STEREO INPUT PROGRAM;
	ZZ(HESLOG,NUL),		⊃	HAND/EYE LOG MESSAGES;
	ZZ(GCREF,FAI+DMP)	⊃	GLOBAL CREF PROGRAM;
⊃	ZZ(MAKSEG,SAI+DMP)	⊃	MAKE A NEW GLOBAL SEGMENT (OBS. ON UDP);
	";
DEFINE FILES="83";	⊃	This is the number of good files;
⊃	Now we use the magic macro to generate our tables;

DEFINE ZZ(A,B)="""A""";
PRELOAD_WITH XX;
SAFE STRING ARRAY GOOD_FILES[1:FILES];
DEFINE ZZ(A,B)="B";
PRELOAD_WITH XX;
SAFE INTEGER ARRAY MORE_EXT[1:FILES];

⊃	This routine is true if one of the common extensions for file
	GOOD_FILE[I] is E;
 
SIMPLE BOOLEAN PROCEDURE EQUEXT(STRING E; INTEGER I);
	BEGIN INTEGER J;
	FOR J ← 0 STEP 1 UNTIL EXT_LENGTH DO
		IF BIT(I, 1 LSH J)∧EQU(COMMON_EXT[J],E) THEN RETURN(TRUE);
	RETURN(FALSE);
	END;

⊃	This is the LPT output routine;

SIMPLE PROCEDURE LPTOUT(REFERENCE STRING FOO);
	OUT(LPT,FOO);

⊃	This is the TTY output routine;


BOOLEAN III;	⊃	TRUE if we are on a display;
INTEGER TTY_OUT;
DEFINE TTY_MAX="25";	⊃	Pause after this many lines if on a dpy;

SIMPLE PROCEDURE TTYOUT(REFERENCE STRING FOO);
	BEGIN
	IF III∧TTY_OUT≥TTY_MAX THEN
		BEGIN
		OUTSTR("TYPE <CR> TO CONTINE");
		INCHWL;
		TTY_OUT ← 0;
		END;
	OUTSTR(FOO);
	TTY_OUT ← TTY_OUT + 1;
	END;

⊃	This is the null output routine;

SIMPLE PROCEDURE NULLOUT(REFERENCE STRING FOO);
	RETURN;
⊃	This routine types the commands;

SIMPLE PROCEDURE COMMANDS;
	BEGIN
	OUTSTR(CRLF&"COMMANDS ARE:"&CRLF);
	OUTSTR("GOOD_FILES→TTY  GOOD_FILES→LPT  BAD_FILES→TTY  BAD_FILES→");
	OUTSTR("LPT   DELETE_BAD_FILES"&CRLF);
	OUTSTR("   1<CR>            2<CR>            3<CR>         4<CR>");
	OUTSTR("          5<CR>"&CRLF);
	END;

⊃	This routine outputs the list of good files;

SIMPLE PROCEDURE OUT_GOOD(PROCEDURE DEVICE);
	BEGIN STRING FOO,Z;
	INTEGER I, J;
	DEVICE(Z←"GOOD FILES ARE:"&CRLF);
	FOR I ← 1 STEP 1 UNTIL FILES DO
		BEGIN
		FOO ← GOOD_FILES[I];
		IF MORE_EXT[I] THEN FOR J←0 STEP 1 UNTIL EXT_LENGTH DO
			IF BIT(I,1 LSH J)∧J≠NULLIND THEN
			FOO←FOO&"."&COMMON_EXT[J]&"	";
		DEVICE(Z←FOO&CRLF);
		END;
	DEVICE(Z←CRLF);
	END;

BOOLEAN BADFLG;	⊃	TRUE if OUT_BAD called;
BOOLEAN ARRAY BAD_FLAGS[1:1000];
⊃	This routine outputs the illegal file names.
	It also generates a table of flags indicating the illegal files;

SIMPLE PROCEDURE OUT_BAD(PROCEDURE DEVICE);
	BEGIN STRING E, F, FOO, Z;
	INTEGER I, J, COUNT;
	BADFLG ← TRUE;
	DEVICE(Z←"ILLEGAL FILES ARE:"&CRLF);
	COUNT ← 0;
	FOO ← NULL;
	FOR I ← 1 STEP 1 UNTIL UFDLENGTH DO
		BEGIN
		F ← UFD_FILE[I];
		E ← UFD_EXT[I];
		FOR J←1 STEP 1 UNTIL FILES DO
			IF EQU(F,GOOD_FILES[J])∧EQUEXT(E,J) THEN DONE;
		IF BAD_FLAGS[I] ← J>FILES THEN
			BEGIN
			IF COUNT≥4 THEN
				BEGIN
				DEVICE(Z←FOO&CRLF);
				FOO ← NULL;
				COUNT ← 0;
				END;
			FOO ← FOO&((F&(IF LENGTH(E) THEN "."&E ELSE "")&
				"            ")[1 FOR 12]);
			COUNT ← COUNT+1;
			END;
		END;
	DEVICE(Z←FOO&CRLF&CRLF);
	END;

⊃	This routine deletes illegal files;

SIMPLE PROCEDURE DELETEX;
	BEGIN BOOLEAN FLAG;
	STRING E, F;
	INTEGER I;
	IF ¬BADFLG THEN OUT_BAD(NULLOUT);
	FOR I←1 STEP 1 UNTIL UFDLENGTH DO IF BAD_FLAGS[I] THEN
		BEGIN
		F ← UFD_FILE[I];
		E ← UFD_EXT[I];
		F ← F&(IF E THEN "."&E ELSE "");
		LOOKUP(DSK,F,FLAG);
		IF ¬FLAG THEN RENAME(DSK,"",0,FLAG);
		OUTSTR(F&(IF FLAG THEN " NOT" ELSE "")&" DELETED"&CRLF);
		BAD_FLAGS[I] ← FALSE;
		END;
	UFDREAD; ⊃	Read new list of files;
	END;
⊃	Now we get down to business;

INTEGER COM, EOF;
LABEL LOOP;

	BADFLG ← FALSE;
	UFDREAD;
	COMMANDS;
	START_CODE DEFINE TTYUUO="'51000000000";
		SETOM 1;
		TTYUUO 6,1;
		SETZM III;
		TLNE 1,'420000;
		SETOM III;
		END;
LOOP:	OUTSTR(CRLF&"COMMAND IS ");
	COM ← CVD(INCHWL);
	IF COM LAND 1 THEN TTY_OUT←0 ELSE OPEN(LPT,"LPT",0,0,2,128,EOF,EOF);
	CASE COM-1 OF
		BEGIN
		OUT_GOOD(TTYOUT);
		OUT_GOOD(LPTOUT);
		OUT_BAD(TTYOUT);
		OUT_BAD(LPTOUT);
		BEGIN
		IF ¬BADFLG THEN
			BEGIN
			OUTSTR("WANT A LIST OF ILLEGAL FILES FIRST?"&CRLF);
			IF INCHWL≠"N" THEN GO TO LOOP;
			END;
		DELETEX;
		END;
		END;
	IF ¬(COM LAND 1) THEN RELEASE(LPT);
	IF III THEN COMMANDS;
	GO TO LOOP;
	END;